﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using Iesi.Collections;
using Iesi.Collections.Generic;
using METODESA.Server.Data.METODESA.Entity;
using METODESA.Server.Data.METODESA.Nhibernate;

namespace Metodesa.Tools
{
    public class ProductosTools
    {
        
        public static HtmlTable ListProductoProveedor(ISet<Producto> lProducto,int idProveedor)
        {
            if (lProducto==null || lProducto.IsEmpty)
            {
                return null;
            }
            else
            {
                HtmlTable table = new HtmlTable();
                HtmlTableRow r = new HtmlTableRow();
                HtmlTableCell delete = new HtmlTableCell();
                HtmlTableCell id = new HtmlTableCell();
                HtmlTableCell name = new HtmlTableCell();
                HtmlTableCell category = new HtmlTableCell();

                delete.BorderColor = id.BorderColor = name.BorderColor = category.BorderColor = "#FFFFFF";
                id.BgColor = delete.BgColor = name.BgColor = category.BgColor = "#a9a9a9";

                id.Controls.Add(new LiteralControl(""));
                id.Controls.Add(new LiteralControl("<b>id</b>"));
                name.Controls.Add(new LiteralControl("<b>Nombre </b>"));
                category.Controls.Add(new LiteralControl("<b>Categoria</b>"));

                r.Cells.Add(delete);
                r.Cells.Add(id);
                r.Cells.Add(name);
                r.Cells.Add(category);
                table.Rows.Add(r);

                int i = 0;
                foreach (Producto producto in lProducto)
                {
                    i++;
                    r = new HtmlTableRow();
                    id = new HtmlTableCell();
                    name = new HtmlTableCell();
                    category = new HtmlTableCell();
                    delete = new HtmlTableCell();
                    id.BorderColor = name.BorderColor = category.BorderColor = "#FFFFFF";
                    if (i%2 == 0)
                    {
                        delete.BgColor = id.BgColor = name.BgColor = category.BgColor = "#E0E9F5";
                    }
                    else
                    {
                        delete.BgColor = id.BgColor = name.BgColor = category.BgColor = "#D3D3D3";
                    }

                    id.Controls.Add(new LiteralControl(producto.Id + ""));
                    name.Controls.Add(new LiteralControl(producto.Nombre));
                    category.Controls.Add(new LiteralControl(producto.Categoria));

                    HyperLink linkBorrar = new HyperLink();
                    linkBorrar.Text = "Borrar";
                    linkBorrar.NavigateUrl = "DetailsProveedor.aspx?id=" + idProveedor + "&a=d&pro=" + producto.Id;
                    delete.Controls.Add(linkBorrar);

                    r.Cells.Add(delete);
                    r.Cells.Add(id);
                    r.Cells.Add(name);
                    r.Cells.Add(category);
                    table.Rows.Add(r);
                }

                return table;
            }
        }

        public static ListBox addProductoProveedor(ISet<Producto> lProducto,ListBox list)
        {
            if (list != null) list.Items.Clear();
            IList<Producto> all = ProductoDao.getAllProducto();
            
            // Para todos los productos que tengo registrado
            foreach (Producto producto in all)
            {
                // Si el producto no esta asociado a este proveedor
                if(lProducto.Contains(producto)==false) 
                list.Items.Add(new ListItem(producto.Nombre, producto.Id.ToString()));
            }
            
            
            
            
            
            return list;
        }

        public static HtmlTable concatProductoProveedor(Producto producto,HtmlTable table,int idProveedor)
        {
            if (table == null)
                return ListProductoProveedor(ProveedorDao.getProveedorById(idProveedor).producto,idProveedor);
            
            HtmlTableRow r = new HtmlTableRow();
            HtmlTableCell id = new HtmlTableCell();
            HtmlTableCell name = new HtmlTableCell();
            HtmlTableCell category = new HtmlTableCell();
            HtmlTableCell delete = new HtmlTableCell();
            int i = table.Rows.Count;
            id.BorderColor = name.BorderColor = category.BorderColor = "#FFFFFF";
            if (i % 2 == 0)
            {
                delete.BgColor = id.BgColor = name.BgColor = category.BgColor = "#E0E9F5";
            }
            else
            {
                delete.BgColor = id.BgColor = name.BgColor = category.BgColor = "#D3D3D3";
            }

            id.Controls.Add(new LiteralControl(producto.Id + ""));
            name.Controls.Add(new LiteralControl(producto.Nombre));
            category.Controls.Add(new LiteralControl(producto.Categoria));

            HyperLink linkBorrar = new HyperLink();
            linkBorrar.Text = "Borrar";
            linkBorrar.NavigateUrl = "DetailsProveedor.aspx?id="+idProveedor+"&a=d&pro=" + producto.Id;
            delete.Controls.Add(linkBorrar);

            r.Cells.Add(delete);
            r.Cells.Add(id);
            r.Cells.Add(name);
            r.Cells.Add(category);
            table.Rows.Add(r);
            
            return table;}

        public static HtmlTable ListProductos(IList<Producto> lProducto)
        {
           
            if(lProducto ==null || lProducto.Count==0)
                return null;
            
            HtmlTable table= new HtmlTable();
            HtmlTableRow r = new HtmlTableRow();
            HtmlTableCell delete=new HtmlTableCell();
            HtmlTableCell edit=new HtmlTableCell();
            HtmlTableCell id = new HtmlTableCell();
            HtmlTableCell name = new HtmlTableCell();
            HtmlTableCell category = new HtmlTableCell();
            HtmlTableCell price = new HtmlTableCell();

             price.BorderColor=delete.BorderColor=id.BorderColor= edit.BorderColor=
                 name.BorderColor = category.BorderColor = "#FFFFFF";
            price.BgColor=id.BgColor =  delete.BgColor= edit.BgColor=
                name.BgColor  = category.BgColor = "#a9a9a9";

            delete.Controls.Add(new LiteralControl("")); 
            edit.Controls.Add(new LiteralControl(""));
            id.Controls.Add(new LiteralControl("<b>id</b>"));
            name.Controls.Add(new LiteralControl("<b>Nombre </b>"));
            category.Controls.Add(new LiteralControl("<b>Categoria</b>"));
            price.Controls.Add(new LiteralControl("<b>Precio</b>"));

            r.Cells.Add(delete);
            r.Cells.Add(edit);
            r.Cells.Add(id);
            r.Cells.Add(name);
            r.Cells.Add(category);
            r.Cells.Add(price);
            table.Rows.Add(r);
            int i = 0;
            foreach (Producto producto in lProducto)
            {
                i++;
                r= new HtmlTableRow();
                id = new HtmlTableCell();
                name = new HtmlTableCell();
                category = new HtmlTableCell();
                price = new HtmlTableCell();
                delete=new HtmlTableCell();
                edit = new HtmlTableCell();
                id.BorderColor = name.BorderColor = category.BorderColor = "#FFFFFF";
                if (i % 2 == 0)
                {
                     price.BgColor=delete.BgColor=id.BgColor  = edit.BgColor=
                         name.BgColor = category.BgColor = "#E0E9F5";
                }
                else
                {
                     price.BgColor=delete.BgColor= id.BgColor = edit.BgColor=
                         name.BgColor =  category.BgColor = "#D3D3D3";
                }

                id.Controls.Add(new LiteralControl(producto.Id + ""));
                name.Controls.Add(new LiteralControl(producto.Nombre));
                category.Controls.Add(new LiteralControl(producto.Categoria));
                price.Controls.Add(new LiteralControl(producto.Precio + ""));

                HyperLink linkEdit = new HyperLink();
                linkEdit.Text = "Editar";
                linkEdit.NavigateUrl = "ListProducto.aspx?a=s&id=" + producto.Id;
                edit.Controls.Add(linkEdit);


                HyperLink linkBorrar = new HyperLink();
                linkBorrar.Text = "Borrar";
                linkBorrar.NavigateUrl = "ListProducto.aspx?a=d&id=" + producto.Id;
                delete.Controls.Add(linkBorrar);

                r.Cells.Add(edit);
                r.Cells.Add(delete);
                r.Cells.Add(id);
                r.Cells.Add(name);
                r.Cells.Add(category);
                r.Cells.Add(price);
                table.Rows.Add(r);
            }
            
            return table;
        }

        public static DropDownList addProductoCompra(DropDownList list, ISet<Producto> lProducto)
        {
            if (list != null) list.Items.Clear();
            IList<Producto> all = ProductoDao.getAllProducto();

            // Para todos los productos que tengo registrado
            foreach (Producto producto in all)
            {
                // Si el producto no esta asociado a este proveedor
                if (lProducto.Contains(producto) == false)
                    if (list != null) 
                        list.Items.Add(new ListItem(producto.Nombre, producto.Id.ToString()));
            }
            

            return list;
        }

        public static DropDownList addProductosLista(DropDownList list, IList<Producto> all)
        {
            

            // Para todos los productos que tengo registrado
            foreach (Producto producto in all)
            {
               list.Items.Add(new ListItem(producto.Nombre, producto.Id.ToString()));
            }


            return list;
        }

        public static DropDownList addAllProductos(DropDownList list)
        {
            if (list != null) list.Items.Clear();
            IList<Producto> all = ProductoDao.getAllProducto();
            

            // Para todos los productos que tengo registrado
            foreach (Producto producto in all)
            {
                if (list != null) 
                    list.Items.Add(new ListItem(producto.Nombre, producto.Id.ToString()));
            }


            return list;
        }


        

        public static ListBox ListCategoria(ListBox list)
        {
            IList a = ProductoDao.getCategorias();
            foreach (object o in a){
               
                list.Items.Add(new ListItem(o.ToString(),o.ToString()));
            }
            return list;
        }

        public static DropDownList addProductosCategorias(DropDownList list, ListItemCollection items)
        {
            IList<Producto> productos=new List<Producto>();

            foreach (ListItem item in items)
            {
                if(item.Selected)
                {
                    IList<Producto> productoCate = ProductoDao.getProductoByCategoria(item.Value);
                    foreach (Producto producto in productoCate)
                    {productos.Add(producto);
                    }
                }
            }
            list = ProductosTools.addProductosLista(list, productos);
            return list;
        }
    }
}
